import cv2
def detectAndDescribe(image):       #定义函数，检测和计算特征点
    gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    sift=cv2.SIFT_create()                      #创建SIFT对象
    kp,des=sift.detectAndCompute(gray,None)     #检测并计算特征点
    return image,kp,des
imgA=cv2.imread("left_01.jpg")
imgB=cv2.imread("right_01.jpg")
#调用函数，检测并计算特征点
imgA,kpA,desA=detectAndDescribe(imgA)
imgB,kpB,desB=detectAndDescribe(imgB)
matcher=cv2.BFMatcher(cv2.NORM_L2)  #创建BFMatcher对象
rawMatches=matcher.match(desA,desB) #特征匹配
#对DMatch对象的distance属性进行排序
rawMatches=sorted(rawMatches,key=lambda x:x.distance)
#绘制图像中匹配的特征点
out=cv2.drawMatches(imgA,kpA,imgB,kpB,rawMatches[:30] ,None)
#显示匹配结果图像
cv2.imshow('drawMatches',out)
cv2.waitKey()
cv2.destroyAllWindows()